package com.atguigu.bigdata.scala.chapter11

object Scala04_Generic {

    def main(args: Array[String]): Unit = {
        // TODO - 泛型 - scala
        // scala中泛型的上限和下限采用颜文字符号，而不是关键字

        // 上限为了保证数据功能不缺失，所以一般用于消费数据
        val c = new Consumer[User]()
        val m: Message[_ <: User] = c.consume()
        val data: User = m.data

        // 下限为了保证生产的数据具备相同的特征，所以一般用于生产数据
        val p = new Producer[User]()
        p.produce(new Message[User])
        //p.produce(new Message[Child])
        p.produce(new Message[Parent])

    }
    class Message[T] {
        var data : T = _
    }
    class Producer[T] {
        //设置下限
        def produce( m : Message[_ >: T] ): Unit = {

        }
    }
    class Consumer[T] {
        //设置上限
        def consume(): Message[_ <: T] = {
            null
        }
    }
    class Parent {

    }
    class User extends Parent{

    }
    class Child extends User {

    }
}
